// 1. 模拟延迟的异步函数
function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

// 2. 异步显示消息（串行执行）
async function showMessage() {
    console.log('开始');
    await delay(1000);
    console.log('1秒后');
    await delay(1000);
    console.log('又1秒后');
}

// 3. 获取用户数据（带错误处理）
async function fetchUserData() {
    try {
        const response = await fetch('https://www.qweather.com/v2/search?lng=undefined&lat=undefined');  //等待返回的数据
        if (!response.ok) {
            throw new Error('网络响应不正常');
        }
        const data = await response.json();  //等待数据的获取，进行解析
        console.log('用户数据:', data);
        return data;
    } catch (error) {
        console.error('获取用户数据失败:', error);
        throw error;
    }
}

// 4. 并行获取多个数据
async function fetchMultipleData() {
    try {
        const [userDataResponse, productDataResponse] = await Promise.all([
            fetch('https://www.qweather.com/v2/search?lng=undefined&lat=undefined'),
            fetch('https://www.qweather.com/v2/search?lng=undefined&lat=undefined')
        ]);

        const user = await userDataResponse.json();
        const products = await productDataResponse.json();

        console.log('用户信息:', user);
        console.log('商品列表:', products);

        return { user, products };
    } catch (error) {
        console.error('并行请求失败:', error);
        throw error;
    }
}

// 5. 主流程控制函数
async function main() {
    console.log('--- 流程开始 ---');

    // 1. 显示消息（模拟初始化步骤）
    await showMessage();

    // 2. 获取用户数据（可能失败）
    let userData;
    try {
        userData = await fetchUserData();
    } catch (e) {
        console.warn('用户数据未加载成功，继续流程...');
    }

    // 3. 并行获取更多数据
    try {
        const { user, products } = await fetchMultipleData();
        console.log('最终结果:', { user, products });
    } catch (e) {
        console.error('关键数据加载失败，流程终止。');
        return;
    }

    console.log('--- 流程结束 ---');
}

// 执行主流程
main();

